home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / machserver / tests.old / client / RCS / client.c,v < prev    next >
Encoding:
Text File  |  1992-06-26  |  11.4 KB  |  494 lines

  1. head     1.6;
  2. branch   ;
  3. access   ;
  4. symbols  srv018:1.6 srv008:1.6;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.6
  10. date     91.08.30.16.06.00;  author kupfer;  state Exp;
  11. branches ;
  12. next     1.5;
  13.  
  14. 1.5
  15. date     91.08.25.22.06.17;  author kupfer;  state Exp;
  16. branches ;
  17. next     1.4;
  18.  
  19. 1.4
  20. date     91.08.12.16.13.13;  author kupfer;  state Exp;
  21. branches ;
  22. next     1.3;
  23.  
  24. 1.3
  25. date     91.07.22.11.37.32;  author kupfer;  state Exp;
  26. branches ;
  27. next     1.2;
  28.  
  29. 1.2
  30. date     91.07.19.15.22.50;  author kupfer;  state Exp;
  31. branches ;
  32. next     1.1;
  33.  
  34. 1.1
  35. date     91.07.18.14.32.34;  author kupfer;  state Exp;
  36. branches ;
  37. next     ;
  38.  
  39.  
  40. desc
  41. @Simple test client, corresponding to /etc/init.
  42. @
  43.  
  44.  
  45. 1.6
  46. log
  47. @Put back in support for shared area for low-level comm. with server.
  48. @
  49. text
  50. @/* 
  51.  * client.c --
  52.  *
  53.  *    Test program for printf server.
  54.  *
  55.  * Copyright 1991 Regents of the University of California
  56.  * Permission to use, copy, modify, and distribute this
  57.  * software and its documentation for any purpose and without
  58.  * fee is hereby granted, provided that this copyright
  59.  * notice appears in all copies.  The University of California
  60.  * makes no representations about the suitability of this
  61.  * software for any purpose.  It is provided "as is" without
  62.  * express or implied warranty.
  63.  */
  64.  
  65. #ifndef lint
  66. static char rcsid[] = "$Header: /user6/kupfer/spriteserver/src/client/RCS/client.c,v 1.5 91/08/25 22:06:17 kupfer Exp Locker: kupfer $ SPRITE (Berkeley)";
  67. #endif /* not lint */
  68.  
  69. #include <ctype.h>
  70. #include <mach.h>
  71. #include <mach_error.h>
  72. #include <status.h>
  73. #include <stdio.h>
  74. #include <user/proc.h>
  75. #include "spriteSrv.h"
  76.  
  77. #define SHARED_ERROR_REGION    1
  78.  
  79. mach_port_t serverPort;        /* port for making Sprite requests */
  80.  
  81. /* Forward references */
  82.  
  83. static int GetLength _ARGS_((char *fileName));
  84. static void MakeFile _ARGS_((char *fileName));
  85. static void MapFile _ARGS_((char *fileName, boolean_t readOnly,
  86.                 int length, Address *startAddrPtr));
  87. static void PrintBuffer _ARGS_((char *fileName, char *bufPtr, int length));
  88. static void WriteToBuffer _ARGS_((char *fileName, char *bufPtr, int length));
  89.  
  90. main()
  91. {
  92.     kern_return_t kernStatus;
  93. #ifdef SHARED_ERROR_REGION
  94.     int *errorPtr = (int *)PROC_SHARED_REGION_START;
  95. #endif
  96.     char *fromName = "testInput"; /* name of file to copy from */
  97.     char *fromBuffer;        /* mapped "from" file */
  98.     char *toName = "testOutput"; /* name of file to copy to */
  99.     char *toBuffer;        /* mapped "to" file */
  100.     int fileLength;
  101.  
  102.     kernStatus = task_get_bootstrap_port(mach_task_self(), &serverPort);
  103.     if (kernStatus != KERN_SUCCESS) {
  104. #if SHARED_ERROR_REGION
  105.     *errorPtr = kernStatus;
  106. #endif
  107.     thread_suspend(mach_thread_self());    
  108.     }
  109.  
  110.     fileLength = GetLength(fromName);
  111. #if 0
  112.     if (fileLength < 0) {
  113.     Test_PutMessage(serverPort, "bailing out.\n");
  114.     goto bailOut;
  115.     }
  116. #endif
  117.  
  118.     MapFile(fromName, TRUE, fileLength, &fromBuffer);
  119.     MapFile(toName, FALSE, fileLength, &toBuffer);
  120.  
  121.     if (fromBuffer != 0 && toBuffer != 0) {
  122.     bcopy(fromBuffer, toBuffer, fileLength);
  123.     }
  124.  
  125.  bailOut:
  126.     Sys_Shutdown(serverPort);
  127. }
  128.  
  129.  
  130. /*
  131.  *----------------------------------------------------------------------
  132.  *
  133.  * MapFile --
  134.  *
  135.  *    Map the named file into our address space.
  136.  *
  137.  * Results:
  138.  *    Fills in the starting location, which is set to 0 
  139.  *    if there was a problem.
  140.  *
  141.  * Side effects:
  142.  *    None.
  143.  *
  144.  *----------------------------------------------------------------------
  145.  */
  146.  
  147. static void
  148. MapFile(fileName, readOnly, length, startAddrPtr)
  149.     char *fileName;        /* name of file to map */
  150.     boolean_t readOnly;        /* map read-only or read-write? */
  151.     int length;            /* number of bytes to map */
  152.     Address *startAddrPtr;    /* OUT: where the file was mapped to */
  153. {
  154.     kern_return_t kernStatus;
  155.     ReturnStatus status;
  156.  
  157.     kernStatus = Vm_MapFileStub(serverPort, fileName, strlen(fileName)+1,
  158.                 readOnly, 0, length, &status, startAddrPtr);
  159.     if (kernStatus != KERN_SUCCESS) {
  160.     Test_PutMessage(serverPort, "Couldn't map file: ");
  161.     Test_PutMessage(serverPort, mach_error_string(kernStatus));
  162.     Test_PutMessage(serverPort, "\n");
  163.     *startAddrPtr = 0;
  164.     } else if (status != SUCCESS) {
  165.     Test_PutMessage(serverPort, "Couldn't map file: ");
  166.     Test_PutMessage(serverPort, Stat_GetMsg(status));
  167.     Test_PutMessage(serverPort, "\n");
  168.     *startAddrPtr = 0;
  169.     }
  170. }
  171.  
  172.  
  173. /*
  174.  *----------------------------------------------------------------------
  175.  *
  176.  * GetLength --
  177.  *
  178.  *    Get the length of a file.
  179.  *
  180.  * Results:
  181.  *    Returns the length of the file, in bytes.  Returns -1 if there 
  182.  *    was an error.
  183.  *
  184.  * Side effects:
  185.  *    None.
  186.  *
  187.  *----------------------------------------------------------------------
  188.  */
  189.  
  190. static int
  191. GetLength(fileName)
  192.     char *fileName;
  193. {
  194.     ReturnStatus status;
  195.     int length;
  196.     kern_return_t kernStatus;
  197.  
  198.     kernStatus = TempFs_LengthStub(serverPort, fileName, strlen(fileName)+1,
  199.                    &status, &length);
  200.     if (kernStatus != KERN_SUCCESS) {
  201.     Test_PutMessage(serverPort, "Couldn't get file length: ");
  202.     Test_PutMessage(serverPort, mach_error_string(kernStatus));
  203.     Test_PutMessage(serverPort, "\n");
  204.     return -1;
  205.     }
  206.     if (status != SUCCESS) {
  207.     Test_PutMessage(serverPort, "Couldn't get file length: ");
  208.     Test_PutMessage(serverPort, Stat_GetMsg(status));
  209.     Test_PutMessage(serverPort, "\n");
  210.     return -1;
  211.     }
  212.  
  213.     return length;
  214. }
  215. @
  216.  
  217.  
  218. 1.5
  219. log
  220. @Copy from "testInput" to "testOutput" by mapping the files and doing a
  221. bcopy.
  222. @
  223. text
  224. @d17 1
  225. a17 1
  226. static char rcsid[] = "$Header: /user6/kupfer/spriteserver/src/client/RCS/client.c,v 1.4 91/08/12 16:13:13 kupfer Exp Locker: kupfer $ SPRITE (Berkeley)";
  227. d28 2
  228. d44 1
  229. d46 1
  230. d55 1
  231. d57 1
  232. @
  233.  
  234.  
  235. 1.4
  236. log
  237. @Snapshot.  Program maps a fixed-length file, scribbles over it, and reads it back.
  238. @
  239. text
  240. @d17 1
  241. a17 1
  242. static char rcsid[] = "$Header: /user6/kupfer/spriteserver/src/client/RCS/client.c,v 1.3 91/07/22 11:37:32 kupfer Exp Locker: kupfer $ SPRITE (Berkeley)";
  243. d43 4
  244. a46 2
  245.     char *fileName = "/usr0/kupfer/testInput"; /* name of file to map */
  246.     char *firstTime, *secondTime; /* buffers for mapped files */
  247. d55 2
  248. a56 1
  249.     fileLength = GetLength(fileName);
  250. d58 1
  251. d61 1
  252. d63 2
  253. a64 2
  254.     MapFile(fileName, FALSE, fileLength, &firstTime);
  255.     WriteToBuffer(fileName, firstTime, fileLength);
  256. d66 2
  257. a67 16
  258.     MapFile(fileName, TRUE, fileLength, &secondTime);
  259.     PrintBuffer(fileName, secondTime, fileLength);
  260.  
  261.     kernStatus = vm_deallocate(mach_task_self(), (vm_address_t)firstTime,
  262.                    fileLength);
  263.     if (kernStatus != KERN_SUCCESS) {
  264.     Test_PutMessage(serverPort, "Couldn't deallocate first buffer: ");
  265.     Test_PutMessage(serverPort, mach_error_string(kernStatus));
  266.     Test_PutMessage(serverPort, "\n");
  267.     }
  268.     kernStatus = vm_deallocate(mach_task_self(), (vm_address_t)secondTime,
  269.                    fileLength);
  270.     if (kernStatus != KERN_SUCCESS) {
  271.     Test_PutMessage(serverPort, "Couldn't deallocate second buffer: ");
  272.     Test_PutMessage(serverPort, mach_error_string(kernStatus));
  273.     Test_PutMessage(serverPort, "\n");
  274. a69 3
  275.     MapFile(fileName, TRUE, fileLength, &secondTime);
  276.     PrintBuffer(fileName, secondTime, fileLength);
  277.  
  278. a77 46
  279.  * PrintBuffer --
  280.  *
  281.  *    Copy the given buffer to stdout.
  282.  *
  283.  * Results:
  284.  *    None.
  285.  *
  286.  * Side effects:
  287.  *    Maps the file into the process address space and leaves it 
  288.  *    there. 
  289.  *
  290.  *----------------------------------------------------------------------
  291.  */
  292.  
  293. static void
  294. PrintBuffer(fileName, bufPtr, length)
  295.     char *fileName;        /* name of file mapped into the buffer */
  296.     char *bufPtr;        /* start of buffer */
  297.     int length;            /* number of bytes to print */
  298. {
  299.     char *chPtr;        /* pointer into the file */
  300.     char buf[2];        /* buffer for 1 character & null */
  301.  
  302.     buf[1] = '\0';
  303.     Test_PutMessage(serverPort, "-- ");
  304.     Test_PutMessage(serverPort, fileName);
  305.     Test_PutMessage(serverPort, " (");
  306.     Test_PutHex(serverPort, bufPtr);
  307.     Test_PutMessage(serverPort, " + ");
  308.     Test_PutDecimal(serverPort, length);
  309.     Test_PutMessage(serverPort, " bytes) --\n");
  310.     for (chPtr = bufPtr; chPtr < bufPtr + length; chPtr++) {
  311.     if (isascii(*chPtr) && (isprint(*chPtr) || isspace(*chPtr))) {
  312.         buf[0] = *chPtr;
  313.         Test_PutMessage(serverPort, buf);
  314.     } else {
  315.         Test_PutMessage(serverPort, "\\");
  316.         Test_PutOctal(serverPort, *chPtr);
  317.     }
  318.     }
  319. }
  320.  
  321.  
  322. /*
  323.  *----------------------------------------------------------------------
  324.  *
  325. a113 38
  326.     }
  327. }
  328.  
  329.  
  330. /*
  331.  *----------------------------------------------------------------------
  332.  *
  333.  * WriteToBuffer --
  334.  *
  335.  *    Scribble over a buffer.
  336.  *
  337.  * Results:
  338.  *    None.
  339.  *
  340.  * Side effects:
  341.  *    Fills the first "length" characters of the buffer with a 
  342.  *    string of characters.
  343.  *
  344.  *----------------------------------------------------------------------
  345.  */
  346.  
  347. static void
  348. WriteToBuffer(fileName, bufferPtr, length)
  349.     char *fileName;        /* name of the file (unused) */
  350.     char *bufferPtr;        /* start of the buffer */
  351.     int length;            /* number of characters to overwrite */
  352. {
  353.     char *chPtr;
  354.     int numChars;        /* number of characters written */
  355.  
  356.     /* Write with a pattern like "0.........1.........2..." */
  357.     for (chPtr = bufferPtr, numChars = 0; numChars < length;
  358.          chPtr++, numChars++) {
  359.     if ((numChars % 10) == 0) {
  360.         *chPtr = '0' + ((numChars / 10) % 10);
  361.     } else {
  362.         *chPtr = '.';
  363.     }
  364. @
  365.  
  366.  
  367. 1.3
  368. log
  369. @Use shutdown call instead of going into infinite loop.
  370. @
  371. text
  372. @d17 1
  373. a17 1
  374. static char rcsid[] = "$Header: /user6/kupfer/spriteserver/src/client/RCS/client.c,v 1.2 91/07/19 15:22:50 kupfer Exp Locker: kupfer $ SPRITE (Berkeley)";
  375. d20 1
  376. d22 2
  377. a23 1
  378. #include <userProc.h>
  379. d25 1
  380. d28 2
  381. d32 6
  382. a37 1
  383. static void CheckStatus();
  384. d41 5
  385. a45 4
  386.     mach_port_t serverPort;
  387.     kern_return_t status;
  388.     int i;
  389.     int *errorPtr = (int *)SHARED_REGION_START;
  390. d47 3
  391. a49 3
  392.     status = task_get_bootstrap_port(mach_task_self(), &serverPort);
  393.     if (status != KERN_SUCCESS) {
  394.     *errorPtr = status;
  395. d53 24
  396. a76 7
  397.     for (i = 0; i <= 20; i++) {
  398.     Sys_PutDecimal(serverPort, i);
  399.     Sys_PutMessage(serverPort, " ");
  400.     Sys_PutOctal(serverPort, i);
  401.     Sys_PutMessage(serverPort, " ");
  402.     Sys_PutHex(serverPort, i);
  403.     Sys_PutMessage(serverPort, "\n");
  404. d79 2
  405. a80 1
  406.     Sys_PutMessage(serverPort, "Hi, mom\n");
  407. d82 1
  408. d84 171
  409. @
  410.  
  411.  
  412. 1.2
  413. log
  414. @Changes so can be started by server.
  415. @
  416. text
  417. @d17 1
  418. a17 1
  419. static char rcsid[] = "$Header: /user6/kupfer/spriteserver/src/client/RCS/client.c,v 1.1 91/07/18 14:32:34 kupfer Exp Locker: kupfer $ SPRITE (Berkeley)";
  420. d53 1
  421. a53 2
  422.  loop:
  423.     goto loop;
  424. @
  425.  
  426.  
  427. 1.1
  428. log
  429. @Initial revision
  430. @
  431. text
  432. @d17 1
  433. a17 1
  434. static char rcsid[] = "$Header: /sprite/lib/forms/RCS/proto.c,v 1.5 91/02/09 13:24:44 ouster Exp $ SPRITE (Berkeley)";
  435. d21 1
  436. a22 1
  437. #include <servers/netname.h>
  438. d34 1
  439. d36 1
  440. a36 2
  441.     status = netname_look_up(name_server_port, "*", "Sprite",
  442.                  &serverPort);
  443. d38 2
  444. a39 3
  445.     fprintf(stderr, "Can't get Sprite server port: %s\n",
  446.         mach_error_string(status));
  447.     exit(1);
  448. d43 6
  449. a48 6
  450.     CheckStatus(Sys_PutDecimal(serverPort, i));
  451.     CheckStatus(Sys_PutMessage(serverPort, " "));
  452.     CheckStatus(Sys_PutOctal(serverPort, i));
  453.     CheckStatus(Sys_PutMessage(serverPort, " "));
  454.     CheckStatus(Sys_PutHex(serverPort, i));
  455.     CheckStatus(Sys_PutMessage(serverPort, "\n"));
  456. d51 1
  457. a51 1
  458.     CheckStatus(Sys_PutMessage(serverPort, "Hi, mom\n"));
  459. d53 2
  460. a54 1
  461.     return 0;
  462. a55 30
  463.  
  464.  
  465. /*
  466.  *----------------------------------------------------------------------
  467.  *
  468.  * CheckStatus --
  469.  *
  470.  *    Verify that an operation succeeded.  Complain and exit if 
  471.  *    there was an error.
  472.  *
  473.  * Results:
  474.  *    None.
  475.  *
  476.  * Side effects:
  477.  *    None.
  478.  *
  479.  *----------------------------------------------------------------------
  480.  */
  481.  
  482. static void
  483. CheckStatus(status)
  484.     kern_return_t status;
  485. {
  486.     if (status != KERN_SUCCESS) {
  487.     fprintf(stderr, "Couldn't do RPC: %s\n",
  488.         mach_error_string(status));
  489.     exit(1);
  490.     }
  491. }
  492.  
  493. @
  494.